﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Common;
using System.Data.SqlClient;

namespace DataLayer
{
    public static class DatCliente
    {

        public static int InsertCliente(dsBoleto.ClienteRow rCliente)
        {
            Util.DBParameter DNI;
            Util.DBParameter IdTipoDNI;
            Util.DBParameter Nombre;
            Util.DBParameter Apellido;
            Util.DBParameter Telefono;
            Util.DBParameter IdProvincia;
            Util.DBParameter DirCalle;
            Util.DBParameter DirNro;
            Util.DBParameter DirPiso;
            Util.DBParameter DirDepto;
            Util.DBParameter Mail;
            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            DNI.dbType = System.Data.DbType.Int32;
            DNI.parameterName = "@DNI";
            DNI.value = rCliente.DNI;
            parameters.Add(DNI);

            IdTipoDNI.dbType = System.Data.DbType.Int32;
            IdTipoDNI.parameterName = "@IdTipoDNI";
            IdTipoDNI.value = rCliente.IdTipoDNI;
            parameters.Add(IdTipoDNI);

            Nombre.dbType = System.Data.DbType.String;
            Nombre.parameterName = "@Nombre";
            Nombre.value = rCliente.Nombre;
            parameters.Add(Nombre);

            Apellido.dbType = System.Data.DbType.String;
            Apellido.parameterName = "@Apellido";
            Apellido.value = rCliente.Apellido;
            parameters.Add(Apellido);

            Telefono.dbType = System.Data.DbType.String;
            Telefono.parameterName = "@Telefono";
            Telefono.value = rCliente.Telefono;
            parameters.Add(Telefono);

            IdProvincia.dbType = System.Data.DbType.Int32;
            IdProvincia.parameterName = "@IdProvincia";
            IdProvincia.value = rCliente.IdProvincia;
            parameters.Add(IdProvincia);

            DirCalle.dbType = System.Data.DbType.String;
            DirCalle.parameterName = "@DirCalle";
            DirCalle.value = rCliente.Calle;
            parameters.Add(DirCalle);

            DirNro.dbType = System.Data.DbType.Int32;
            DirNro.parameterName = "@DirNro";
            DirNro.value = rCliente.Nro;
            parameters.Add(DirNro);

            DirPiso.dbType = System.Data.DbType.Int32;
            DirPiso.parameterName = "@DirPiso";
            DirPiso.value = rCliente.Piso;
            parameters.Add(DirPiso);

            DirDepto.dbType = System.Data.DbType.String;
            DirDepto.parameterName = "@DirDepto";
            DirDepto.value = rCliente.Depto;
            parameters.Add(DirDepto);

            Mail.dbType = System.Data.DbType.String;
            Mail.parameterName = "@Mail";
            Mail.value = rCliente.Mail;
            parameters.Add(Mail);


            SqlCommand miCommand = Util.SQLCommandBuild("ClienteInsert", parameters);

            return int.Parse(miCommand.ExecuteScalar().ToString());
        }

        public static void UpdateCliente(dsBoleto.ClienteRow rCliente)
        {
            Util.DBParameter IdCliente;
            Util.DBParameter DNI;
            Util.DBParameter IdTipoDNI;
            Util.DBParameter Nombre;
            Util.DBParameter Apellido;
            Util.DBParameter Telefono;
            Util.DBParameter IdProvincia;
            Util.DBParameter DirCalle;
            Util.DBParameter DirNro;
            Util.DBParameter DirPiso;
            Util.DBParameter DirDepto;
            Util.DBParameter Mail;
            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            IdCliente.dbType = System.Data.DbType.Int32;
            IdCliente.parameterName = "@IdCliente";
            IdCliente.value = rCliente.IdCliente;
            parameters.Add(IdCliente);

            DNI.dbType = System.Data.DbType.Int32;
            DNI.parameterName = "@DNI";
            DNI.value = rCliente.DNI;
            parameters.Add(DNI);

            IdTipoDNI.dbType = System.Data.DbType.Int32;
            IdTipoDNI.parameterName = "@IdTipoDNI";
            IdTipoDNI.value = rCliente.IdTipoDNI;
            parameters.Add(IdTipoDNI);

            Nombre.dbType = System.Data.DbType.String;
            Nombre.parameterName = "@Nombre";
            Nombre.value = rCliente.Nombre;
            parameters.Add(Nombre);

            Apellido.dbType = System.Data.DbType.String;
            Apellido.parameterName = "@Apellido";
            Apellido.value = rCliente.Apellido;
            parameters.Add(Apellido);

            Telefono.dbType = System.Data.DbType.String;
            Telefono.parameterName = "@Telefono";
            Telefono.value = rCliente.Telefono;
            parameters.Add(Telefono);

            IdProvincia.dbType = System.Data.DbType.Int32;
            IdProvincia.parameterName = "@IdProvincia";
            IdProvincia.value = rCliente.IdProvincia;
            parameters.Add(IdProvincia);

            DirCalle.dbType = System.Data.DbType.String;
            DirCalle.parameterName = "@DirCalle";
            DirCalle.value = rCliente.Calle;
            parameters.Add(DirCalle);

            DirNro.dbType = System.Data.DbType.Int32;
            DirNro.parameterName = "@DirNro";
            DirNro.value = rCliente.Nro;
            parameters.Add(DirNro);

            DirPiso.dbType = System.Data.DbType.Int32;
            DirPiso.parameterName = "@DirPiso";
            DirPiso.value = rCliente.Piso;
            parameters.Add(DirPiso);

            DirDepto.dbType = System.Data.DbType.String;
            DirDepto.parameterName = "@DirDepto";
            DirDepto.value = rCliente.Depto;
            parameters.Add(DirDepto);

            Mail.dbType = System.Data.DbType.String;
            Mail.parameterName = "@Mail";
            Mail.value = rCliente.Mail;
            parameters.Add(Mail);


            SqlCommand miCommand = Util.SQLCommandBuild("ClienteUpdate", parameters);

            miCommand.ExecuteNonQuery();
        }

        public static void DeleteCliente(int idCliente)
        {
            Util.DBParameter IdCliente;

            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            IdCliente.dbType = System.Data.DbType.Int32;
            IdCliente.parameterName = "@IdCliente";
            IdCliente.value = idCliente;
            parameters.Add(IdCliente);

            SqlCommand miCommand = Util.SQLCommandBuild("ClienteDelete", parameters);

            miCommand.ExecuteNonQuery();
        }

        public static dsBoleto getCliente(int idCliente)
        {
            //Cargo el Parametro en el manejador de params SQL.-
            Util.DBParameter IdCliente;
            IdCliente.dbType = System.Data.DbType.Int32;
            IdCliente.parameterName = "@IdCliente";
            IdCliente.value = idCliente;

            //Genero el SQLCommando con el Util Builder
            SqlCommand sc = Util.SQLCommandBuild("ClientesGet", IdCliente);

            using (SqlDataReader dr = sc.ExecuteReader())
            {
                try
                {
 
                    Util.DSBoleto = new dsBoleto();
                    while (dr.Read())
                    {
                        dsBoleto.ClienteRow row = Util.DSBoleto.Cliente.NewClienteRow();
                        row.IdCliente = dr.GetInt32(0);
                        row.DNI = dr.GetInt32(1);
                        row.IdTipoDNI = dr.GetInt32(2);
                        row.DescripcionDNI = dr.GetString(3);
                        row.Nombre = dr.GetString(4);
                        row.Apellido = dr.GetString(5);
                        row.Telefono = dr.GetString(6);
                        row.IdProvincia = dr.GetInt32(7);
                        row.DescripcionProvincia = dr.GetString(8);
                        row.Calle = dr.GetString(9);
                        row.Nro = dr.GetInt32(10);
                        row.Piso = dr.GetInt32(11);
                        row.Depto = dr.GetString(12);
                        row.Mail = dr.GetString(13);
                        row.Habilitado = dr.GetBoolean(14);

                        Util.DSBoleto.Cliente.AddClienteRow(row);
                    }
                }
                catch (Exception ex)
                {

                    throw ex;
                }
            }

            return Util.DSBoleto;
        }

        public static dsBoleto getClientes(string nombre, string apellido, int idTipoDni, int dni, int idProvincia, string mail, string telefono, string calle, int numero, int piso, string depto)
        {
            if (Util.DSBoleto == null)
                Util.DSBoleto = new dsBoleto();
            Util.DSBoleto.Cliente.Clear();
            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            //Cargo el Parametro en el manejador de params SQL.-
            Util.DBParameter Nombre;
            Nombre.dbType = System.Data.DbType.String;
            Nombre.parameterName = "@Nombre";
            Nombre.value = nombre;
            parameters.Add(Nombre);

            Util.DBParameter Apellido;
            Apellido.dbType = System.Data.DbType.String;
            Apellido.parameterName = "@Apellido";
            Apellido.value = apellido;
            parameters.Add(Apellido);

            Util.DBParameter IdTipoDNI;
            IdTipoDNI.dbType = System.Data.DbType.String;
            IdTipoDNI.parameterName = "@IdTipoDNI";
            IdTipoDNI.value = idTipoDni;
            parameters.Add(IdTipoDNI);

            Util.DBParameter DNI;
            DNI.dbType = System.Data.DbType.Int32;
            DNI.parameterName = "@DNI";
            DNI.value = dni;
            parameters.Add(DNI);

            Util.DBParameter IdProvincia;
            IdProvincia.dbType = System.Data.DbType.String;
            IdProvincia.parameterName = "@IdProvincia";
            IdProvincia.value = idProvincia;
            parameters.Add(IdProvincia);

            Util.DBParameter Mail;
            Mail.dbType = System.Data.DbType.String;
            Mail.parameterName = "@Mail";
            Mail.value = mail;
            parameters.Add(Mail);

            Util.DBParameter Telefono;
            Telefono.dbType = System.Data.DbType.String;
            Telefono.parameterName = "@Telefono";
            Telefono.value = telefono;
            parameters.Add(Telefono);

            Util.DBParameter DirCalle;
            DirCalle.dbType = System.Data.DbType.String;
            DirCalle.parameterName = "@Calle";
            DirCalle.value = calle;
            parameters.Add(DirCalle);

            Util.DBParameter DirNro;
            DirNro.dbType = System.Data.DbType.Int32;
            DirNro.parameterName = "@Numero";
            DirNro.value = numero;
            parameters.Add(DirNro);

            Util.DBParameter DirPiso;
            DirPiso.dbType = System.Data.DbType.Int32;
            DirPiso.parameterName = "@Piso";
            DirPiso.value = piso;
            parameters.Add(DirPiso);

            Util.DBParameter DirDepto;
            DirDepto.dbType = System.Data.DbType.String;
            DirDepto.parameterName = "@Depto";
            DirDepto.value = depto;
            parameters.Add(DirDepto);



            //Genero el SQLCommando con el Util Builder
            SqlCommand sc = Util.SQLCommandBuild("ClientesSearch", parameters);




            using (SqlDataReader dr = sc.ExecuteReader())
            {
                if (Util.DSBoleto == null)
                    Util.DSBoleto = new dsBoleto();

                while (dr.Read())
                {
                    dsBoleto.ClienteRow row = Util.DSBoleto.Cliente.NewClienteRow();
                    row.IdCliente = dr.GetInt32(0);
                    row.DNI = dr.GetInt32(1);
                    row.DescripcionDNI = dr.GetString(2);
                    row.Nombre = dr.GetString(3);
                    row.Apellido = dr.GetString(4);
                    row.Telefono = dr.GetString(5);
                    row.IdProvincia = dr.GetInt32(6);
                    row.DescripcionProvincia = dr.GetString(7);
                    row.Calle = dr.GetString(8);
                    row.Nro = dr.GetInt32(9);
                    row.Piso = dr.GetInt32(10);
                    row.Depto = dr.GetString(11);
                    row.Mail = dr.GetString(12);
                    row.Habilitado = dr.GetBoolean(13);

                    Util.DSBoleto.Cliente.AddClienteRow(row);
                }
            }


            return Util.DSBoleto;
        }
        public static dsBoleto getClientesPremium(int anio)
        {
            if (Util.DSBoleto == null)
                Util.DSBoleto = new dsBoleto();
            Util.DSBoleto.Cliente.Clear();
            List<Common.Util.DBParameter> parameters = new List<Util.DBParameter>();

            //Cargo el Parametro en el manejador de params SQL.-
            Util.DBParameter Anio;
            Anio.dbType = System.Data.DbType.String;
            Anio.parameterName = "@Anio";
            Anio.value = anio;
            parameters.Add(Anio);

            //Genero el SQLCommando con el Util Builder
            SqlCommand sc = Util.SQLCommandBuild("ClientesGetPremium", parameters);


            //   using (SqlDataReader dr = sc.ExecuteReader())
            // {
            if (Util.DSBoleto == null)
                Util.DSBoleto = new dsBoleto();


            List<string> Tablas = new List<string>();
            Tablas.Add("Cliente");


            return Util.SelectSPtoDatasetSolve(sc, Tablas.ToArray());


            /*
            while (dr.Read())
            {
                dsBoleto.ClienteRow row = Util.DSBoleto.Cliente.NewClienteRow();
                row.IdCliente = dr.GetInt32(0);
                row.DNI = dr.GetInt32(1);
                row.DescripcionDNI = dr.GetString(2);
                row.Nombre = dr.GetString(3);
                row.Apellido = dr.GetString(4);
                   
                Util.DSBoleto.Cliente.AddClienteRow(row);
            }*/
        }


        //return Util.DSBoleto;
        //}
    }

}
